/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import BE.Proyecto;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author CarLita
 */
public class ProyectoDao {
    Session session;

    public List buscarPorCriterios(Proyecto p){

        session = HibernateUtil.getSessionFactory().openSession();
        String cliente = p.getCliente().getRazonSocial();
        String marcoReferencia = p.getMarcoReferencia();        

        String hql = "from Proyecto proyecto where proyecto.marcoReferencia like concat('%',?,'%') " +
                "and proyecto.cliente.razonSocial like concat('%',?,'%') ";

        Query query = session.createQuery(hql);
        query.setString(0,marcoReferencia);
        query.setString(1, cliente);

        List resultList = null;
        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return resultList;
        } catch (HibernateException he) {
            he.printStackTrace();
        }
        session.close();
        return null;
    }

    public boolean eliminarPorId(int idProyecto) {
        boolean ok =true;
        Proyecto proyecto = buscarPorId(idProyecto);
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            session.delete(proyecto);
            tx.commit();
            session.close();
        }
        catch(Exception e){
            ok = false;
            System.out.println(e.getMessage());
        }
        //eliminar enunciados, secciones, papeles de trabajo y el marco de referencia x)

        return ok;
    }

    public Proyecto buscarPorId(int idProyecto) {
        session = HibernateUtil.getSessionFactory().openSession();

        String hql = "from Proyecto proyecto where proyecto.idproyecto = ?";

        Query query = session.createQuery(hql);
        query.setInteger(0,idProyecto);

        List resultList = null;
        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return (Proyecto)resultList.get(0);
        } catch (HibernateException he) {
            he.printStackTrace();
        }
        session.close();
        return null;
    }

    public int buscarIdPorNombre(String nombre){
        session = HibernateUtil.getSessionFactory().openSession();
        String hql = "from Proyecto proyecto where proyecto.nombre = ?";
        Query query = session.createQuery(hql);
        query.setString(0, nombre);
        List resultList = null;

        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return ((Proyecto)resultList.get(0)).getIdproyecto();
        } catch (HibernateException he) {
            he.printStackTrace();
        }

        session.close();
        return 0;
    }

    public boolean guardar(Proyecto proyecto) {
        boolean ok =true;
        session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try {
            tx.begin();
            session.saveOrUpdate(proyecto);
            tx.commit();
        } catch (HibernateException he){
            ok = false;
            tx.rollback();
            he.printStackTrace();
        } finally {
            session.close();
        }
        return ok;
    }
}
